package com.earthea.common.algorithm.dictionarytree;

/**
 * 字典树算法
 *
 * @param <T> 节点路径类型
 * @param <D> 节点数据类型
 */
public interface DictionaryTreeAlgorithm<T, D> {
    /**
     * 新增字典树节点
     *
     * @param nodePath 字典树节点
     * @param isPrefix 是否前缀匹配
     * @param nodeData 节点数据
     */
    void addNode(T nodePath, boolean isPrefix, D nodeData);

    /**
     * 新增字典树节点，默认没有节点数据
     *
     * @param nodePath 字典树节点
     * @param isPrefix 是否前缀匹配
     */
    default void addNode(T nodePath, boolean isPrefix) {
    }

    /**
     * 新增字典树节点，默认精确匹配，默认没有节点数据
     *
     * @param nodePath 字典树节点
     */
    default void addNode(T nodePath) {
        addNode(nodePath, false);
    }

    /**
     * 匹配节点是否存在
     *
     * @param nodePath 字典树节点
     * @return 是否匹配
     */
    boolean isMatch(T nodePath);

    /**
     * 获取匹配节点数据
     *
     * @param nodePath 字典树节点
     * @return 节点数据
     */
    D getMatchData(T nodePath);

}
